<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    DANCE WITH JAVA

    開發出高質量的系統

    常用鏈接

    統計

    積分與排名

    好友之家

    最新評論

    對(重載overloading和覆寫overriding哪個更早執行-- visitor幫助篇)這篇文章的說明

    有興趣的話可以看看這篇文章,下邊gg_shily朋友和我的一些討論,在gg_shily的激發下,我決定仔細研究一下這個問題,在我的很多文章中都用過的字節碼,我想在這里也能幫助我 。下邊是分析的結果,為了方便觀看,我把里邊的兩個類稍微變動一下
    ?1package?ov;
    ?2
    ?3public?class?Child?extends?Parent?{
    ?4
    ?5????public?void?run(Object?o)?{
    ?6????????System.out.println("?in?Child?+param:Object?");
    ?7????}

    ?8
    ?9????public?void?run(String?str)?{
    10????????System.out.println("?in?Child?+?param:String?");
    11????}

    12
    13????public?static?void?main(String[]?args)?{
    14????????
    15????????String?str?=?new?String();
    16????????Parent?p?=?new?Child();
    17????????test(p,str);
    18????}

    19????public?static?void?test(Parent?p,String?str){
    20????????p.run(str);
    21????}

    22}
    然后編譯,反編譯得到字節碼如下:(得到字節碼的方法見這里
    public?class?ov.Child?extends?ov.Parent{
    public?ov.Child();
    ??Code:
    ???
    0:???aload_0
    ???
    1:???invokespecial???#8;?//Method?ov/Parent."<init>":()V
    ???4:???return

    public?void?run(java.lang.Object);
    ??Code:
    ???
    0:???getstatic???????#16;?//Field?java/lang/System.out:Ljava/io/PrintStream;
    ???3:???ldc?????#22;?//String??in?Child?+param:Object
    ???5:???invokevirtual???#24;?//Method?java/io/PrintStream.println:(Ljava/lang/St
    ring;)V
    ???
    8:???return

    public?void?run(java.lang.String);
    ??Code:
    ???
    0:???getstatic???????#16;?//Field?java/lang/System.out:Ljava/io/PrintStream;
    ???3:???ldc?????#32;?//String??in?Child?+?param:String
    ???5:???invokevirtual???#24;?//Method?java/io/PrintStream.println:(Ljava/lang/St
    ring;)V
    ???
    8:???return

    public?static?void?main(java.lang.String[]);
    ??Code:
    ???
    0:???new?????#38;?//class?java/lang/String
    ???3:???dup
    ???
    4:???invokespecial???#40;?//Method?java/lang/String."<init>":()V
    ???7:???astore_1
    ???
    8:???new?????#1;?//class?ov/Child
    ???11:??dup
    ???
    12:??invokespecial???#41;?//Method?"<init>":()V
    ???15:??astore_2
    ???
    16:??aload_2
    ???
    17:??aload_1
    ???
    18:??invokestatic????#42;?//Method?test:(Lov/Parent;Ljava/lang/String;)V
    ???21:??return

    public?static?void?test(ov.Parent,?java.lang.String);
    ??Code:
    ???
    0:???aload_0
    ???
    1:???aload_1
    ???
    2:???invokevirtual???#50;?//Method?ov/Parent.run:(Ljava/lang/String;)V
    ???5:???return

    }
    可以看到調用的是Parent.run(String)這樣說明在編譯期間,因為重載就決定了Parent.run(String)
    然后到運行期,會向下轉型到Child.run(String)

    posted on 2006-12-20 00:32 dreamstone 閱讀(2615) 評論(3)  編輯  收藏 所屬分類: jdk相關

    評論

    # re: 對(重載overloading和覆寫overriding哪個更早執行-- visitor幫助篇)這篇文章的說明 2006-12-20 20:43 gg_shily

    不好意思,我白天用不了msn,周末的時候才能用,我的msn是GG_sHiLy@hotmail.com,加你了,你這么說我覺得就很明白了,呵呵  回復  更多評論   

    # re: 對(重載overloading和覆寫overriding哪個更早執行-- visitor幫助篇)這篇文章的說明 2007-02-18 01:39 喜來了

    對Java中, 怎樣從一個方法調用instance.foo(args) ,找到實際調用的函數, 在Core Java里有很詳細的描述, 簡單講, 每個Class會保存一個方法調用表, 根據instance的具體值和方法的signature尋找。 順帶的, Core Java里還詳細講述了Java Compiler和Java解釋器是怎樣從一個類名找到一個具體的類文件位置。

    其實所謂的Polymorphy也好, Overloading也好都是對Java Compiler和解釋器內部算法的抽象。如果有人需要Core Java的電子書,我這有,發封信給我。也可以從這個站上下http://m.tkk7.com/xilaile/archive/2007/02/16/100022.aspx
    很多關于計算機的書  回復  更多評論   

    # re: 對(重載overloading和覆寫overriding哪個更早執行-- visitor幫助篇)這篇文章的說明 2007-06-21 13:18 s

    我要Core Java的電子書謝謝 shangcom2006@163.com  回復  更多評論   

    主站蜘蛛池模板: 亚洲av永久无码精品网址| 亚洲一区二区三区日本久久九| 日韩毛片免费无码无毒视频观看 | 成年女人男人免费视频播放 | 精品一区二区三区免费毛片| 免费观看美女裸体网站| 亚洲精品精华液一区二区| 国产高清在线免费| 国产亚洲综合成人91精品| 国产精品免费观看视频| 奇米影视亚洲春色| 好久久免费视频高清| 久久精品国产亚洲精品2020| 黄色永久免费网站| 亚洲乱亚洲乱妇无码| 免费v片在线观看无遮挡| 成年大片免费视频播放一级| 国产aⅴ无码专区亚洲av麻豆| 免费视频一区二区| 亚洲乱码在线视频| 国产一级婬片A视频免费观看| 久久精品国产精品亚洲精品| 午夜老司机永久免费看片| 亚洲国产精品午夜电影| 国产真人无遮挡作爱免费视频| 视频免费1区二区三区| 亚洲AV无码一区二区二三区入口 | 色婷婷六月亚洲婷婷丁香| 久草在视频免费福利| 人人爽人人爽人人片A免费| 久久亚洲精品中文字幕三区| 免费电影在线观看网站| 日本黄页网址在线看免费不卡| 久久久亚洲精品无码| 夭天干天天做天天免费看| 中文在线观看国语高清免费| 亚洲人成网站在线观看播放青青| 免费大香伊蕉在人线国产| 四虎国产精品永久免费网址 | 亚洲阿v天堂在线2017免费| 亚洲美女大bbbbbbbbb|